package com.ruoyi.movie.domain;

import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.basic.domain.Country;
import com.ruoyi.basic.domain.Column;

/**
 * 影视基础信息对象 movie_basics
 *
 * @author ruoyi
 * @date 2025-10-27
 */
public class MovieBasics extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 影视基础ID */
    private Integer movieBasicsId;

    /** 状态(0正常 1停用) */
    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
    private String status;

    /** 发行状态(0未发行 1已发行) */
    @Excel(name = "发行状态", readConverterExp = "0=未发行,1=已发行")
    private String releaseStatus;

    /** 发行日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "发行日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date releaseDate;

    /** 标题 */
    @Excel(name = "标题")
    private String title;

    /** 副标题 */
    @Excel(name = "副标题")
    private String subTitle;

    /** 海报 */
    @Excel(name = "海报")
    private String poster;

    /** 缩略图 */
    @Excel(name = "缩略图")
    private String picThumb;

    /** 幻灯图 */
    @Excel(name = "幻灯图")
    private String picSlide;

    /** 截图集(逗号分隔) */
    @Excel(name = "截图集")
    private String picScreenshot;

    /** 背景色 */
    private String bgColor;

    /** 英文标题 */
    @Excel(name = "英文标题")
    private String titleEn;

    /** 原始标题 */
    private String titleOriginal;

    /** 首字母(用于索引) */
    @Excel(name = "首字母")
    private String letter;

    /** 别名 */
    private String akas;

    /** 栏目类型 */
    @Excel(name = "栏目类型")
    private String columnValue;

    /** 扩展分类(多分类支持) */
    @Excel(name = "扩展分类")
    private String classExtend;

    /** 年份 */
    @Excel(name = "年份")
    private Integer year;

    /** 发布日期 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "发布日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date pubDate;

    /** 时长 */
    @Excel(name = "时长")
    private String duration;

    /** 多个时长版本 */
    private String durations;

    /** 版本信息 */
    private String versions;

    /** 彩蛋数量 */
    private Integer eggHunt;

    /** 颜色 */
    private String color;

    /** 季数 */
    @Excel(name = "季数")
    private Integer seasonCount;

    /** 当前季 */
    @Excel(name = "当前季")
    private Integer currentSeason;

    /** 集数 */
    @Excel(name = "集数")
    private Integer episodeCount;

    /** 当前集 */
    @Excel(name = "当前集")
    private Integer currentEpisode;

    /** 是否完结(0连载中 1已完结) */
    @Excel(name = "是否完结", readConverterExp = "0=连载中,1=已完结")
    private String theEnd;

    /** 语言 */
    @Excel(name = "语言")
    private String languages;

    /** 标签 */
    @Excel(name = "标签")
    private String tags;

    /** 简介 */
    @Excel(name = "简介")
    private String summary;

    /** 是否付费(0否 1是) */
    @Excel(name = "是否付费", readConverterExp = "0=否,1=是")
    private Integer isPay;

    /** 付费金额（金币） */
    @Excel(name = "付费金额")
    private Integer paymentAmount;

    /** 免费时长（分钟） */
    @Excel(name = "免费时长")
    private Integer freeDuration;

    // 采集相关字段
    /** 地区 */
    private String area;

    /** 演员文本(缓存) */
    private String actorText;

    /** 导演文本(缓存) */
    private String directorText;

    /** 编剧文本(缓存) */
    private String writerText;

    /** 制片人 */
    private String producerText;

    /** 采集来源站点 */
    private String collectFrom;

    /** 采集源ID */
    private String collectId;

    /** 添加时间戳(MacCMS兼容) */
    private Integer timeAdd;

    /** 更新时间戳(MacCMS兼容) */
    private Integer timeUpdate;

    /** 总集数 */
    private Integer totalEpisodes;

    /** 豆瓣ID */
    private Integer doubanId;

    /** 简介/推荐语 */
    private String blurb;

    /** 状态(正片/预告等) */
    private String state;

    /** 更新星期 */
    private String weekday;

    /** MacCMS评分 */
    private Double vodScore;

    /** 总评分 */
    private Integer vodScoreAll;

    /** 评分人数 */
    private Integer vodScoreNum;

    // 关联查询字段（不对应数据库字段）
    private List<Cast> casts;
    private List<Country> countries;
    private List<Column> columns;
    private MovieRate movieRate;
    private MoviePv pv;

    public Integer getMovieBasicsId() {
        return movieBasicsId;
    }

    public void setMovieBasicsId(Integer movieBasicsId) {
        this.movieBasicsId = movieBasicsId;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getReleaseStatus() {
        return releaseStatus;
    }

    public void setReleaseStatus(String releaseStatus) {
        this.releaseStatus = releaseStatus;
    }

    public Date getReleaseDate() {
        return releaseDate;
    }

    public void setReleaseDate(Date releaseDate) {
        this.releaseDate = releaseDate;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSubTitle() {
        return subTitle;
    }

    public void setSubTitle(String subTitle) {
        this.subTitle = subTitle;
    }

    public String getPoster() {
        return poster;
    }

    public void setPoster(String poster) {
        this.poster = poster;
    }

    public String getPicThumb() {
        return picThumb;
    }

    public void setPicThumb(String picThumb) {
        this.picThumb = picThumb;
    }

    public String getPicSlide() {
        return picSlide;
    }

    public void setPicSlide(String picSlide) {
        this.picSlide = picSlide;
    }

    public String getPicScreenshot() {
        return picScreenshot;
    }

    public void setPicScreenshot(String picScreenshot) {
        this.picScreenshot = picScreenshot;
    }

    public String getBgColor() {
        return bgColor;
    }

    public void setBgColor(String bgColor) {
        this.bgColor = bgColor;
    }

    public String getTitleEn() {
        return titleEn;
    }

    public void setTitleEn(String titleEn) {
        this.titleEn = titleEn;
    }

    public String getTitleOriginal() {
        return titleOriginal;
    }

    public void setTitleOriginal(String titleOriginal) {
        this.titleOriginal = titleOriginal;
    }

    public String getLetter() {
        return letter;
    }

    public void setLetter(String letter) {
        this.letter = letter;
    }

    public String getAkas() {
        return akas;
    }

    public void setAkas(String akas) {
        this.akas = akas;
    }

    public String getColumnValue() {
        return columnValue;
    }

    public void setColumnValue(String columnValue) {
        this.columnValue = columnValue;
    }

    public String getClassExtend() {
        return classExtend;
    }

    public void setClassExtend(String classExtend) {
        this.classExtend = classExtend;
    }

    public Integer getYear() {
        return year;
    }

    public void setYear(Integer year) {
        this.year = year;
    }

    public Date getPubDate() {
        return pubDate;
    }

    public void setPubDate(Date pubDate) {
        this.pubDate = pubDate;
    }

    public String getDuration() {
        return duration;
    }

    public void setDuration(String duration) {
        this.duration = duration;
    }

    public String getDurations() {
        return durations;
    }

    public void setDurations(String durations) {
        this.durations = durations;
    }

    public String getVersions() {
        return versions;
    }

    public void setVersions(String versions) {
        this.versions = versions;
    }

    public Integer getEggHunt() {
        return eggHunt;
    }

    public void setEggHunt(Integer eggHunt) {
        this.eggHunt = eggHunt;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Integer getSeasonCount() {
        return seasonCount;
    }

    public void setSeasonCount(Integer seasonCount) {
        this.seasonCount = seasonCount;
    }

    public Integer getCurrentSeason() {
        return currentSeason;
    }

    public void setCurrentSeason(Integer currentSeason) {
        this.currentSeason = currentSeason;
    }

    public Integer getEpisodeCount() {
        return episodeCount;
    }

    public void setEpisodeCount(Integer episodeCount) {
        this.episodeCount = episodeCount;
    }

    public Integer getCurrentEpisode() {
        return currentEpisode;
    }

    public void setCurrentEpisode(Integer currentEpisode) {
        this.currentEpisode = currentEpisode;
    }

    public String getTheEnd() {
        return theEnd;
    }

    public void setTheEnd(String theEnd) {
        this.theEnd = theEnd;
    }

    public String getLanguages() {
        return languages;
    }

    public void setLanguages(String languages) {
        this.languages = languages;
    }

    public String getTags() {
        return tags;
    }

    public void setTags(String tags) {
        this.tags = tags;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public Integer getIsPay() {
        return isPay;
    }

    public void setIsPay(Integer isPay) {
        this.isPay = isPay;
    }

    public Integer getPaymentAmount() {
        return paymentAmount;
    }

    public void setPaymentAmount(Integer paymentAmount) {
        this.paymentAmount = paymentAmount;
    }

    public Integer getFreeDuration() {
        return freeDuration;
    }

    public void setFreeDuration(Integer freeDuration) {
        this.freeDuration = freeDuration;
    }

    public List<Cast> getCasts() {
        return casts;
    }

    public void setCasts(List<Cast> casts) {
        this.casts = casts;
    }

    public List<Country> getCountries() {
        return countries;
    }

    public void setCountries(List<Country> countries) {
        this.countries = countries;
    }

    public List<Column> getColumns() {
        return columns;
    }

    public void setColumns(List<Column> columns) {
        this.columns = columns;
    }

    public MovieRate getMovieRate() {
        return movieRate;
    }

    public void setMovieRate(MovieRate movieRate) {
        this.movieRate = movieRate;
    }

    public MoviePv getPv() {
        return pv;
    }

    public void setPv(MoviePv pv) {
        this.pv = pv;
    }

    // Collection related getters and setters
    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public String getActorText() {
        return actorText;
    }

    public void setActorText(String actorText) {
        this.actorText = actorText;
    }

    public String getDirectorText() {
        return directorText;
    }

    public void setDirectorText(String directorText) {
        this.directorText = directorText;
    }

    public String getWriterText() {
        return writerText;
    }

    public void setWriterText(String writerText) {
        this.writerText = writerText;
    }

    public String getProducerText() {
        return producerText;
    }

    public void setProducerText(String producerText) {
        this.producerText = producerText;
    }

    public String getCollectFrom() {
        return collectFrom;
    }

    public void setCollectFrom(String collectFrom) {
        this.collectFrom = collectFrom;
    }

    public String getCollectId() {
        return collectId;
    }

    public void setCollectId(String collectId) {
        this.collectId = collectId;
    }

    public Integer getTimeAdd() {
        return timeAdd;
    }

    public void setTimeAdd(Integer timeAdd) {
        this.timeAdd = timeAdd;
    }

    public Integer getTimeUpdate() {
        return timeUpdate;
    }

    public void setTimeUpdate(Integer timeUpdate) {
        this.timeUpdate = timeUpdate;
    }

    public Integer getTotalEpisodes() {
        return totalEpisodes;
    }

    public void setTotalEpisodes(Integer totalEpisodes) {
        this.totalEpisodes = totalEpisodes;
    }

    public Integer getDoubanId() {
        return doubanId;
    }

    public void setDoubanId(Integer doubanId) {
        this.doubanId = doubanId;
    }

    public String getBlurb() {
        return blurb;
    }

    public void setBlurb(String blurb) {
        this.blurb = blurb;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getWeekday() {
        return weekday;
    }

    public void setWeekday(String weekday) {
        this.weekday = weekday;
    }

    public Double getVodScore() {
        return vodScore;
    }

    public void setVodScore(Double vodScore) {
        this.vodScore = vodScore;
    }

    public Integer getVodScoreAll() {
        return vodScoreAll;
    }

    public void setVodScoreAll(Integer vodScoreAll) {
        this.vodScoreAll = vodScoreAll;
    }

    public Integer getVodScoreNum() {
        return vodScoreNum;
    }

    public void setVodScoreNum(Integer vodScoreNum) {
        this.vodScoreNum = vodScoreNum;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
            .append("movieBasicsId", getMovieBasicsId())
            .append("status", getStatus())
            .append("releaseStatus", getReleaseStatus())
            .append("releaseDate", getReleaseDate())
            .append("title", getTitle())
            .append("subTitle", getSubTitle())
            .append("poster", getPoster())
            .append("picThumb", getPicThumb())
            .append("picSlide", getPicSlide())
            .append("picScreenshot", getPicScreenshot())
            .append("bgColor", getBgColor())
            .append("titleEn", getTitleEn())
            .append("titleOriginal", getTitleOriginal())
            .append("letter", getLetter())
            .append("akas", getAkas())
            .append("columnValue", getColumnValue())
            .append("classExtend", getClassExtend())
            .append("year", getYear())
            .append("pubDate", getPubDate())
            .append("duration", getDuration())
            .append("durations", getDurations())
            .append("versions", getVersions())
            .append("eggHunt", getEggHunt())
            .append("color", getColor())
            .append("seasonCount", getSeasonCount())
            .append("currentSeason", getCurrentSeason())
            .append("episodeCount", getEpisodeCount())
            .append("currentEpisode", getCurrentEpisode())
            .append("theEnd", getTheEnd())
            .append("languages", getLanguages())
            .append("tags", getTags())
            .append("summary", getSummary())
            .append("isPay", getIsPay())
            .append("paymentAmount", getPaymentAmount())
            .append("freeDuration", getFreeDuration())
            .append("collectFrom", getCollectFrom())
            .append("collectId", getCollectId())
            .append("timeAdd", getTimeAdd())
            .append("timeUpdate", getTimeUpdate())
            .append("totalEpisodes", getTotalEpisodes())
            .append("remark", getRemark())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .toString();
    }
}
